home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume27 / dmake / part04 < prev    next >
Encoding:
Text File  |  1992-01-29  |  40.0 KB  |  1,316 lines

  1. Newsgroups: comp.sources.misc
  2. From: dvadura@plg.waterloo.edu (Dennis Vadura)
  3. Subject:  v27i105:  dmake - dmake Version 3.8, Part04/41
  4. Message-ID: <1992Jan28.031206.6937@sparky.imd.sterling.com>
  5. X-Md4-Signature: 368bb50c9e7418fad1fe40f43f184c22
  6. Date: Tue, 28 Jan 1992 03:12:06 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: dvadura@plg.waterloo.edu (Dennis Vadura)
  10. Posting-number: Volume 27, Issue 105
  11. Archive-name: dmake/part04
  12. Environment: Atari-ST, Coherent, Mac, MSDOS, OS/2, UNIX
  13. Supersedes: dmake: Volume 19, Issue 22-58
  14.  
  15. ---- Cut Here and feed the following to sh ----
  16. # this is dmake.shar.04 (part 4 of a multipart archive)
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file dmake/dbug/dbug/dbug.uue continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 4; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test -f _shar_wnt_.tmp; then
  33. sed 's/^X//' << 'SHAR_EOF' >> 'dmake/dbug/dbug/dbug.uue' &&
  34. M2B'8ZSA!Z_024_ZP2,),<,)]TQ+7HV\P>:&O7K\S21"#S_9!9W],773'GA-4
  35. MCM1LX )CH ,&D0,Z<-Q5ON<ZX/0.H@-.'RF22N5(/9SX1^5(S08N, 8Z8! Y
  36. MH /'7>5[K@-.[R ZX/21 JA4CM3#B7]4CM1LX )CH ,&D0,Z<-Q5ON<ZX/0.
  37. MH@-.'RD=1>5(/9SX1^5(S08N, 8ZH$\SH /'7>5[K@-0;'HZ ,6FITJB">.U
  38. MS@8N, 8ZH$\SH /'7>5[K@-0;'HZ ,6FITH."^.US@8N, 8ZH$\SH /'7>5[
  39. MK@-0;'HZ ,6FITHZY5( 2.<34<S^];!4CM0=T@(C0 8Z\*94CM1LH -&H -,
  40. MH -&<LS=3.@_HZ2OQ3P,>UZJ5E77SV<_(P(,1@:/^/D)<XN3&$=L#P(B0.5(
  41. MS08N, :/N&=.%K0_3)DX (O6(0)17MJG/?VJ1"[6$5NRP?9%,_A!%P,R@'[6
  42. M7,W"GLT<5<8?1:DB%7_@O.QM[,;/+L?1GLY(^81.Z(3O_- -^- -R- "#?U2
  43. MD 4(D 4(D 4(D 4@D/)8X?+LG%(0W8 ,/= [6!;0#][YC!5/Z(1...WD)"74
  44. M:6I/QE;T53"\X\4O.?KI,3=9%S'T1A"77YZ?CQ>O91TO#6; )4M4]+M?_>ZW
  45. MP6#!H?/D[IR10B[6X4L;XR>&S?:8*_6:(A)7WUMGH/6_Q?M%&?9A'_:\8?8/
  46. M?#>0YV9^8MB_1YV+/]C='7_37=W771PPPI'0X5#IXS$7*AO'(6FTD3GRPC0S
  47. MR:EM5/X@-ND39VK PUC@+Y)T7C*=V&GJB[CT3[5V @*(*(J[F9#8/*PJ+ <B
  48. M8,#P(=W4;=W8_?EFR)YT?J=5$BBC[T9G<J2CCD6]9C/8//X#H0;L>2[@_XKJ
  49. M./]ZT4HSR:EAH)M/U5FR]L$+>1A^8CI&!>\#P;'E0><Z#OO4;=W8+?TVC[A(
  50. MMJ&=Z.[N>_!BC.9JSN9NCCG2;05/D 1$\ 5ION9M+OTVWR_8O-64'FL0$G#<
  51. M"6H#(=W4;=U20.?2?U@$D4.(UC4P5Q" ECG64AX'+\9HKN9L[N;/H^.P;P5/
  52. MD 1$\ 5ION9MGCFI1>>F4DAP55F8\8>%TQC20D5R4O:Q@:38_-)@!ERR-%P>
  53. M<Z&R<1R21AOE2 9,LY-TCM!8H ,Z#OO4;=W8C9;:G9E;A^9JSN9NCJG0"1EF
  54. M!B&A)8KPUD* -OYTODZ"2]+Z 6C23=W6C=W2;_-[MOENW#]'S)VU%>^=V&GJ
  55. MJ_>\0VXZ2>< QA-RPR143.DZ7TNBSQ-RPR011.<XFQPZ61 HX'W3I'D$$=E-
  56. M4Q!DV]+P*\;2;05/D 1$\ 5ION9MGCFI%?^!.GO:A,WX0Q ;"A^0J!#Q]P5I
  57. MON9M;A":0><Z#OM6\ 1)0 1?D.9KWN:9DUJ7>$OC3^<_/3L+XQH6T[[E02'2
  58. M3=W6C=W2GQ%=BLWJB-)+NXI<X]'(!TCDDJTV@\V?CQ=5V8EQ(V<W72HH "$X
  59. M3TT_3^<(C04ZH..PG^9KWN:U1VXZ&>?X5P18H ,Z#OM6\ 1)0 1?D.9KWN;0
  60. M+1/>#=[B3=[% 2,<R7/^>'59QRYH"TT'+\:N&(@#$02W2XAC\^M9BCG:R<4)
  61. M^_G4[QK.>MYL69<5LC3,U4S+V5*H*\:^$B1QPS(+(VF \3_K)B)[$L4GP8R/
  62. M6@18H ,Z#OO?'=[C7=XACM[0G1,;WN$#,05EL+[>L:+9OS,?4AK1&VY",>OP
  63. M*\97EW5:%/69/?6-4O557_58?P9:[V0?<B>/43IQ9&_'+NP;%0/;_%&4*E+Q
  64. M!\[+WL9N_.QR'.WI#/0YL78K 8OOEEUUH$[6L:*+6!K,!HYN#/@1NTYZTR%1
  65. MG"9( B/06=0SR:F?SUF=IKZ_^]5XP2Z7YD5>/).<"J3O!EL?$CL0UCR2U843
  66. M1.?KI#<M%<6O?F(.CQB(5O:QT=+P*\:_SL!'9F $X01@ A_\PF<_XX??> 9T
  67. M#@(BT (C\(CDXAT*;VL=%L6[4;O-D\1BC"2^=GV1$G2__DCSKQ?N'^EO@ !O
  68. M@ !O@ !@@@!T@ !T@  !.9.<RA[2PHJN(2:J##^?7SJ=IKXRZL;.F!&^<M/#
  69. M!:3L@5@ )(J[F9#8O-75SB[#JL(4H_Z% KZ52P<(0 <(0 <(H"'EN[ER@ !R
  70. M@ !R@  .S#L@( (M, *EC<U1?!+,^*A%@ 4ZH..P#P4<[N$H$.+YO=\D[N1=
  71. M[E)%@ 4ZH..P#P4<[N%H208Z0 ?;3><(C04ZH..P#P4<[N%HN=U KQ#QQ^-/
  72. M  6#*5_F6-3(R!<["N[H6=/TQJEE)VF%8QV+&#O1L1+62=5ODET)B<UEIT[,
  73. MZV0?@D7\$D?A)A3E^4QMALT+.WWEJ8X6@QE_2"'/9&(E(9LRZL;"'W\\_@10
  74. M(/TVOS"N83&_KI[,^*A%@ 4ZH..P#P5/  7/#?3>'']?8 1)P 0'73+P(=U&
  75. MD 1,<-#2;_-)ED/WDS#]2N<W#QS4HA=)\ )/4%WI$ZM*ZB%;:"S8K#BJE$,^
  76. M02XZ5G7(]E1(@J38K&$:+R<B<'DP]XCD* *7)R2/^%HV@\VO!WD@D 0O\ 0S
  77. M347,^*A%@ 4ZP!NU+-U&D 1,4 1"(P)$((KZT0925E4DYL9)\ )/$ )P#MTR
  78. M(=U%@ 5%, 158-WQ#A_270184 1#4 76G3FI=1[(E$.(EI#8[(I?1,3!P1%'
  79. M;!%6^KNED?]TGK[KHO<_$ZOSEAFQ!S4Y=#]O0.>GMK!\Y49G<KW<81T 7[O-
  80. MD\1BC"2PU1_U 9V=IKZ_^QR?;X;L2>?->=/E"5=(E#(3.5DY!#6K<XQTKN.P
  81. MW^,__OEO8$>+([+_$1LA4XCT=N")09WE:=.DQW?.9"'*HH]<=@)D< )TSAN 
  82. MA!(+XQH6\^N/=&3L@@))X )%X +I.! B\%'8/ )DH -T\(B1?Q\> CDG\?-T
  83. MCM!8H ,Z#OM%@ 5%, 158-W?RF&;49='PF%C@@).#MWJ)]UN7C(A)OV@;[A)
  84. MY>;HT6MMQ!$G,9.<*@,M4 /IF%17EW41 Q@QHY]E "*#Y-&H*\8@6;0^02[>
  85. MX6IR,XX\X9NA1Q#SAZ38O*+>+04^SE"?S\?'+NP;%0/%_E&4*E+Q!\[+WL9N
  86. M_.QR'.WI#/3('G\\+@4^SE"8RI']NJR%D^Z%)P)FH*^EC<W (08<<<23/G&Q
  87. MYD76<7595X>[B\VLUQ%"(]U&D 1,4 2_"Q_YWQV=IKYTGF2 %JL@,&^9$7O'
  88. M"1\U6A\^\3UTWL#MZV0._^KJV$;K-)UA5!_?> 9TGK[K\L-Y03). ";PP2\R
  89. M&\/9T2_8',4E'2F_SL!'QBZ1V!W,Z:]T+OTVG[[K<K+PA?Z(7O557_4I4RF4
  90. MDA<(0 <(0 <($)"EX1A^8EP^81)T'DM91QJ"Q8R/6@18H ,Z#OL]_N-H60:@
  91. M49>/Z7PAPO;8\9R8&>?X5P18H ,Z#OL]_N-H:2=U^9AVHDK16I=T#ATNZ>1=
  92. M[E)%@ 4ZH..PW^,_CI9Y 0=U^9C1ZE$^ )=*GA=PT*78G!?JU (^P'-EX.30
  93. M/1/2/05JK@1-  7% 2,^02YPHA)4JV-E0 =J\"8HH'F3/G%LB\VND_^O 3OI
  94. M<W595X>=OR>+.).<^D2K;DAO!!\/?#>0IW!J\"9T?F8'ZOB,HQQ553!&8OF=
  95. MO\)O0.=07.5M> (Z6VGN \.E(=U,\ 1.< 1*T 100.?2;_-)ED/WDS FX7U!
  96. M;!VO!WET+FOU<09J\"8HH'F%R")#,#=9%S&%54A"U2 71N=3)MU3H.9*T 10
  97. MD#GL.2!C<'7RZ1PP/),'+EOC#XM%HV-5-_YT7C&@N!NSEAC,^*A%@ 4ZH..P
  98. M/P5JK@1-  6U%QF9^7/2S01/X 1'H 1-  7% 2,^02YPHA)4:QV*<1)J\"8H
  99. MH'F3/G%LB\WXD_\#03=5[H\/N:/@3N?H^6<+UT;0(4#PP7!M)&M(0^<Z#OM3
  100. MH.9*T 10@,0M;2%#[(HM#;]B_'J0YS#U<09J\"8HH'EG=J $X01@ A_EI?\)
  101. M>W59%S%2-OH#(=U,\ 1.< 1*T 10<&SO3N=07.7^N(B=*+.\DZ)E"[]B#$A(
  102. M)MU3H.9*T 10$/^8L31-TYQE)RV9_AYT#F##(_EQ!"-BPG;2/05JK@1-  5_
  103. MB\W2S01/X 1'H 1-  634SSY\CM2MJ&/9C/8G/T'XC$7*AO'(6FT48YDP#2E
  104. M0;8V@\WY#XF=IKY2_<M!DG4 PG8V@\WL4>W,^*A%@ 4ZH..PSP1/X 1'H 1-
  105. M  6U%QDL0&Z96<W"GLT<=0/&_G[)OL::VE)N_.QR'.WIC)3#SQ4&7?PAW_HE
  106. MY8(T2-!#D/)O$<],T?Q4 /W@G<]8<=$6;=$@\(1.Z(3-3P70+P4P&,\RZ((K
  107. M..VC%[&1?Q\> CF[\1PYQ)' *;.\LX@L1,#P >X$D>Z%-_RJ7_PB[X(KF/P\
  108. M/M$$^,Y/Z(1.^(,^Z(.9DUH&C!XUBO@(\61L15]%+6)SDW414UA^]!M'FOUM
  109. M.H8Z3XXV$W& I!_#JL+Y\M-,1V<[1WL%+S&DL28#$02=IKX:<V3KZQA^8EP^
  110. M02XGL 4G_$0GT 4G'(FE+C+) ?PX009;P +SEAFQ-P=M601.O'/_2'G78?:9
  111. M\^X$T35T3A"UVSSS,F^9$7OP'O2FP30=<F301^<$,6^9$7NN(4!PHF7\LK^%
  112. M-&^9$7L,<CK";DG4*9) GQ!$L 4LX&=M"1* A/\9!F'-<S\"]&>Z^52X3N<$
  113. MH:0_K"SYE3"O%'Y/1P8<81(R>N)4($ ZY!HE(9NO93"<D;LM!&@U6A])C,TH
  114. M0&XZN67^I4K^"IPVVO@?L7>F1^?CXAHLEA',2!%FL 4L,/YST);_-D $D?W*
  115. MUK,ZW]()@Z3"7KO-,R]'!F_<,?[P'@1"9Z@G?F2J/.D3I_/GX4I:5E[LLC)T
  116. M3A#CSR!)94G4*9) GQ-& .AR<%"X#N[A]W1!QY!TWM(_4_X@AK>:Z/02$_F!
  117. M>_#8;!V?;R1PA=/6H:3,^*A, .AR<%"X#N[A]W1!QY!TWM*\,_A.OW-!M]3[
  118. MA[UT?FRI=6;,MAO6H:3,^*CFHE)R<%"X#N[A]W1!QY!TWM*E.#=9IW&4;FHE
  119. MIW=CB') GQ-N/@5EP(<7:FQ+O7_G8F;_TOE5+>Q*^L.DOG:;X6!ZL4_Q7DY<
  120. M[,8YU(Y#1C% XA>.D6KA)@=E!R-RXCXD=N+93U6(=QZN(43/]2FETC5T/CEG
  121. MK:3,*&I;P *@UY:!]WO4F3[9WZ:(YR%;J.]O0.<MS3LAQVC-@VB@9\!5M'>F
  122. M1^<$H:1.IGB%X7JW)R0D$P0$T?/#>>*_SL!'QBYP!2.YBWA2C;K8K'UNKV(>
  123. M@GD&!O23LP4L@+;4T9;_-D $D?W*UK,ZW]()@Z3"7KO-@VAH2QTD$P2FP30M
  124. M=62G-^V/NE$Q@ /&_G[)OL::VE)N_.QR'.WI#/3.YDI:UEKL3AV_6TX,NF!,
  125. M0^<$L>F>8_'2@D4_S70\E#H$41Z_D<38C+;4P2). ";PP2_L@NO_TOE5+>Q*
  126. M^L.DSF;-Z>YR<&AW:S/"7OX@EAYSDW7L@K8#D>Y(*NPG  4GW#<M\;O(:/&(
  127. M5?Z(^T[M6QYTWM*\TQV=IKZB@B0P@F@ AJ3"/ORJ7_PB[X(KF/P\/M$%>(!6
  128. MD<]80=#B'8(:^(1.Z(1/Z(1.*/T9P8R/"@6 +@<'A>O@'GY/%W0,2><M_3/E
  129. M#V+I,3=9%R;LSB+)/,/"GD/M:+CFDD/8,G4 Q.ZUI$QT3A >PS&6YAQ-XSD6
  130. M+RU8Q"_L$HG$!!MT3A# LQO9'X@@X 1@PNU\AIR1J'7"CK:9PYY5R1$G41HC
  131. M_#/9KTW"'OGWX2&0LQOX8V*Q)"WEB3\V(^SE\1L^@;;4P8R/<PXA/DDC=J
  132. M0.ES-W76,?RJ7_PB[X(KF/P\/M$$^,Y/Z(1.^(,^Z(-T?FRI!4]T4P9\5HIS
  133. MDW5WYR!%A?C"/FLM)P:R!$\LEA$LDLSOE$/M*)]!?>+#K_K%+_(NN(+)S^,3
  134. M38#O_(1.Z(0_Z(,^F#GO7K4J!AW%4G8< 3G+0>>0>%_:7QK9OS,?LI,/2P=;
  135. MP ).T)9%X,02,_[KI#=\XS>"@FKY(:,G7NAA@ <"]#$5 XJ[<7*J5+O-D\38
  136. M'+U.T%X^07I\M[ZN(V P@'[6;,U _Z@;=5/&_G[)OL::VE)N_.QR'.WIC)0_
  137. MZ(,^"(/QS!3-3P5/Z(1.&/0-+=!!./Q<D5(0[8#WG 1/Z(1.2-#B'8(:>-$6
  138. M;=$7;=$6S= "'80&G?)8\<Y/Z(1...WU"6+E^$XYU(YG=D8J[5/<81TO#6; 
  139. M)4O3C"$%DS#(%XF%)W<$-V7>41*RZ=/D0@>9D?AF$"19!QG8,T>-^+OE5!V#
  140. MZ%T.ZJ^)YD9G<O &T2QG32XBNC]T=!E(U8:#LZ$T,FE^D5SNA1"Q)1F[8?F=
  141. MOR=*RHLG%B19EW.K^+O(Z.<=@8I?$T<><U13-TW]XUU5Z 8RYQKD(J+[0T>7
  142. M@50S.2[LDC5SX",;BD7JV$9*>AXB6S:]9D9R$_Z]MD19NV!^X1BI!GH&#!]T
  143. MD!D# 21^X1BI!GIRPF9?$T>HFR7+$R19!R#&AGR1R)&W,8Q1ET)QPS)(51IR
  144. M5Q])RAU]EAF<KJ<THCSZ.&/ 3Q%!,! \T;3EZ<5@8^D)2C=T+RB@^.I(!1^;
  145. MCXN'Y*-#3""WE!YSDW7LTO=>A![(%XGSTA*!.\,((7<$9Y@\@9^NT?>!];OE
  146. MY!HX6K4+QC2U9"$DEIUY'XG5M;PF@3EA/6/ 3Q&*HTKZ6Z1F$&&FQ[[RLCR%
  147. MA4)X4/B%L_!/E9 88N[G"1L]5[_P,?[)X;<@!@(O#6; )4O3C! X5"3MZUW\
  148. MU3ZG G-XJXGK%"AA;;( 9K:? [V$LQO9'X@@D%94;DKBA<(R1B-WX!<Z9.YD
  149. MY1/DLD0'T?=)GSY00!M':A%#L+2K>" VW48XQ!FTUVM<1<#F=4ML _<@@ 15
  150. M%9QVY(8>0AEGP#*.01]S0T5$LOV4KS'@R3)-)3!XPXGK=*'VMUDW[8_9?R"?
  151. MCQ<-3,#P 3V;0;A2QL0$ET7EZ<+ T=3Q#A_),W));! +OR>1W33-F4-VICKX
  152. MCSD:@FV,A0>%_RU^GB/H9\W5+.S9'&#H]5&4*E+Q!\[+WL9N_.QR'.WIC)0$
  153. M/00,+= 66($5:- ,+=#-3P5/Z(1...U"]M)@!ERR-%R9(0=KX!H^\DZVY%H_
  154. MS70;.I,$(0)!1U'G3@:/^(\R!S6RXS5((BA*PND7+SKOXAB*-9P'$6YR4':5
  155. M=2)91AWE\[7Q/[S-^4)R$$SE:4TU#UTD=A 4=>[SXEIJ-3M(@K-!<7^"5^6N
  156. M$;U#\KHD;9/P:Q#K,6GY!B*?CQ?P5(@A-T9\0^DZK_E%&D: Y&C@F)V\D_T4
  157. M$^7P#@)/T$+TX=9E<)SHH1Y]$4GH4>\(L1YPXEUEFJV6W_E[HJ2JI-.>008?
  158. M,R/SDB&E0_9/CSYEEQ<M('<"DHN#"T? 3Q%]'AXZ(OK,U!CBB%K*\<%&=1V4
  159. MKO/Q-"($;%[PA?Z)ONB&P@8(P 8(P 8(H!P(P 8(P 8(H!@(\ 8(\ 8(\,$(
  160. M, 8(, 8(D'#/=--R1OK(6(\^S&R[81VO!WD:\])@!ERR1$6_^]5XH1>7)B!U
  161. 6JTKA=5]I *"4_\%4D\0&T1CB.!Q$ 1VO
  162. end
  163. SHAR_EOF
  164. chmod 0640 dmake/dbug/dbug/dbug.uue ||
  165. echo 'restore of dmake/dbug/dbug/dbug.uue failed'
  166. Wc_c="`wc -c < 'dmake/dbug/dbug/dbug.uue'`"
  167. test 22625 -eq "$Wc_c" ||
  168.     echo 'dmake/dbug/dbug/dbug.uue: original size 22625, current size' "$Wc_c"
  169. rm -f _shar_wnt_.tmp
  170. fi
  171. # ============= dmake/dbug/getwd.c ==============
  172. if test -f 'dmake/dbug/getwd.c' -a X"$1" != X"-c"; then
  173.     echo 'x - skipping dmake/dbug/getwd.c (File already exists)'
  174.     rm -f _shar_wnt_.tmp
  175. else
  176. > _shar_wnt_.tmp
  177. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/getwd.c' &&
  178. char *
  179. getwd(pathname)
  180. char *pathname;
  181. {
  182. X   return("delete this code if your getwd.c works correctly");
  183. }
  184. SHAR_EOF
  185. chmod 0640 dmake/dbug/getwd.c ||
  186. echo 'restore of dmake/dbug/getwd.c failed'
  187. Wc_c="`wc -c < 'dmake/dbug/getwd.c'`"
  188. test 106 -eq "$Wc_c" ||
  189.     echo 'dmake/dbug/getwd.c: original size 106, current size' "$Wc_c"
  190. rm -f _shar_wnt_.tmp
  191. fi
  192. # ============= dmake/dbug/malloc/Makefile ==============
  193. if test ! -d 'dmake/dbug/malloc'; then
  194.     mkdir 'dmake/dbug/malloc'
  195. fi
  196. if test -f 'dmake/dbug/malloc/Makefile' -a X"$1" != X"-c"; then
  197.     echo 'x - skipping dmake/dbug/malloc/Makefile (File already exists)'
  198.     rm -f _shar_wnt_.tmp
  199. else
  200. > _shar_wnt_.tmp
  201. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/Makefile' &&
  202. #
  203. # (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  204. # You may copy, distribute, and use this software as long as this
  205. # copyright statement is not removed.
  206. #
  207. #
  208. # This is the Makefile for the malloc debugging library
  209. #
  210. # $Id: Makefile,v 1.5 90/08/29 22:34:27 cpcahil Exp $
  211. #
  212. CC=cc
  213. # for System V systems use this CFLAGS
  214. #CFLAGS=-g -DSYS5
  215. # else for BSD use:
  216. #CFLAGS=-g
  217. LINT=lint
  218. SHARCMD=shar -o mallocshar -l50 -x -a -n Malloclib
  219. SHELL=/bin/sh
  220. X
  221. LIB=libmalloc.a
  222. X
  223. SRCS=    malloc.c    \
  224. X    free.c        \
  225. X    realloc.c    \
  226. X    calloc.c    \
  227. X    string.c    \
  228. X    mlc_chk.c    \
  229. X    mlc_chn.c    \
  230. X    memory.c    \
  231. X    tostring.c    \
  232. X    m_perror.c    \
  233. X    m_init.c    \
  234. X    mallopt.c    \
  235. X    dump.c
  236. X
  237. OBJS=    malloc.o    \
  238. X    free.o        \
  239. X    realloc.o    \
  240. X    calloc.o    \
  241. X    string.o    \
  242. X    mlc_chk.o    \
  243. X    mlc_chn.o    \
  244. X    memory.o    \
  245. X    tostring.o    \
  246. X    m_perror.o    \
  247. X    m_init.o    \
  248. X    mallopt.o    \
  249. X    dump.o
  250. X
  251. TESTS=testmlc testmem
  252. X
  253. all:    $(LIB) $(TESTS)
  254. X
  255. clean:  
  256. X    rm -f $(TESTS) pgm $(LIB) *.o *.ln
  257. X
  258. sharfile:
  259. X    $(SHARCMD) Makefile README patchlevel *.[ch3] 
  260. X    
  261. $(LIB): $(OBJS)
  262. X    ar ru $(LIB) $(OBJS)
  263. X    -if test -s /bin/ranlib; then /bin/ranlib $(LIB); else exit 0; fi
  264. X    -if test -s /usr/bin/ranlib; then /usr/bin/ranlib $(LIB); else exit 0; fi
  265. X
  266. testmlc:    $(LIB) testmlc.o
  267. X    $(CC) -o $@ testmlc.o $(LIB)
  268. X
  269. testmem:    $(LIB) testmem.o
  270. X    $(CC) -o $@ testmem.o $(LIB)
  271. X
  272. lint:    
  273. X    $(LINT) $(CFLAGS) $(SRCS) testmlc.c testmem.c
  274. X
  275. X
  276. $(OBJS):    malloc.h
  277. X
  278. tostring.o malloc.o dump.o:    tostring.h
  279. SHAR_EOF
  280. chmod 0640 dmake/dbug/malloc/Makefile ||
  281. echo 'restore of dmake/dbug/malloc/Makefile failed'
  282. Wc_c="`wc -c < 'dmake/dbug/malloc/Makefile'`"
  283. test 1365 -eq "$Wc_c" ||
  284.     echo 'dmake/dbug/malloc/Makefile: original size 1365, current size' "$Wc_c"
  285. rm -f _shar_wnt_.tmp
  286. fi
  287. # ============= dmake/dbug/malloc/_changes ==============
  288. if test -f 'dmake/dbug/malloc/_changes' -a X"$1" != X"-c"; then
  289.     echo 'x - skipping dmake/dbug/malloc/_changes (File already exists)'
  290.     rm -f _shar_wnt_.tmp
  291. else
  292. > _shar_wnt_.tmp
  293. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/_changes' &&
  294. I made the following changes to the malloc package as found in
  295. comp.sources.unix:
  296. X
  297. X    1. created this file _changes.
  298. X    2. moved README to _readme (facilitates transfer to DOS and back to
  299. X       unix)
  300. X    3. renamed testmalloc.c, malloc_chk.c, and malloc_chn.c to testmlc.c,
  301. X       mlc_chk.c, and mlc_chn.c respectively.  Again DOS has trouble with
  302. X       long basenames in filenames.
  303. SHAR_EOF
  304. chmod 0640 dmake/dbug/malloc/_changes ||
  305. echo 'restore of dmake/dbug/malloc/_changes failed'
  306. Wc_c="`wc -c < 'dmake/dbug/malloc/_changes'`"
  307. test 369 -eq "$Wc_c" ||
  308.     echo 'dmake/dbug/malloc/_changes: original size 369, current size' "$Wc_c"
  309. rm -f _shar_wnt_.tmp
  310. fi
  311. # ============= dmake/dbug/malloc/_readme ==============
  312. if test -f 'dmake/dbug/malloc/_readme' -a X"$1" != X"-c"; then
  313.     echo 'x - skipping dmake/dbug/malloc/_readme (File already exists)'
  314.     rm -f _shar_wnt_.tmp
  315. else
  316. > _shar_wnt_.tmp
  317. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/_readme' &&
  318. # (c) Copyright 1990 Conor P. Cahill. (uunet!virtech!cpcahil) 
  319. # You may copy, distribute, and use this software as long as this
  320. # copyright statement is not removed.
  321. X
  322. This package is a collection of routines which are a drop-in replacement
  323. for the malloc(3), memory(3), string(3), and bstring(3) library functions.
  324. X
  325. The purpose of these programs is to aid the development and/or debugging
  326. of programs using these functions by providing a high level of consistancy
  327. checking whenever a malloc pointer is used.  Due to this increased 
  328. level of consistancy checking, these functions have a considerably larger
  329. overhead than the standard functions, but the extra checking should be
  330. well worth it in a development environment.
  331. X
  332. To use these functions all you need to do is compile the library and
  333. include it on your loader command line.  You do not need to recompile
  334. your code, only a relink is necessary.  
  335. X
  336. Features of this library:
  337. X
  338. X 1. The malloced area returned from each call to malloc is filled with
  339. X    non-null bytes.  This should catch any use of uninitialized malloc
  340. X    area.  The fill pattern for malloced area is 0x01.
  341. X
  342. X 2. When free is called numerous validity checks are made on the 
  343. X    pointer it is passed.  In addition, the data in the malloc block
  344. X    beyound the size requested on the initial malloc is checked to 
  345. X    verify that it is still filled with the original fill characters.
  346. X
  347. X    This is usefull for catching things like:
  348. X
  349. X        ptr = malloc(5);
  350. X        ptr[5] = '\0';
  351. X
  352. X        /*
  353. X         * You should not that this will be caught when it is
  354. X         * freed not when it is done
  355. X         */
  356. X
  357. X    And finally, the freed block is filled with a different fill pattern
  358. X    so that you can easily determine if you are still using free'd space.
  359. X    The fill pattern for free'd areas is 0x02.
  360. X
  361. X    This is usefull for catching things like:
  362. X
  363. X        ptr = malloc(20);
  364. X
  365. X        bptr = ptr+10;
  366. X
  367. X        /* do something usefule with bptr */
  368. X
  369. X        free(ptr);
  370. X
  371. X        /* 
  372. X         * now try to do something useful with bptr, it should
  373. X         * be trashed enough that it would cause real problems
  374. X         * and when you went to debug the problem it would be
  375. X         * filled with 0x02's and you would then know to look 
  376. X         * for something free'ing what bptr points to.
  377. X         */
  378. X        
  379. X
  380. X 3. Whenever a bstring(3)/string(3)/memory(3) function is called, it's 
  381. X    parameters are checked as follows:
  382. X
  383. X    If they point somewhere in the malloc arena
  384. X        If the operation goes beyond requested malloc space
  385. X            call malloc_warning()
  386. X
  387. X    This is usefull for catching things like:
  388. X
  389. X        ptr = malloc(5);
  390. X        strcpy(ptr,"abcde");
  391. X            
  392. X    
  393. X 4. Malloc_warning() and malloc_fatal() are used when an error condition
  394. X    is detected.  If the error is severe, malloc_fatal is called.  
  395. X    Malloc_warning is used otherwise.  The decision about what is fatal
  396. X    and what is a warning was made somewhat arbitrarily.
  397. X
  398. X    Warning messages include:
  399. X
  400. X    Calling free with a bad pointer
  401. X        Calling a bstring/string/memory (3) function which will go beyond
  402. X        the end of a malloc block (Note that the library function is
  403. X            not modified to refuse the operation.  If malloc warnings are
  404. X        in the default IGNORE case, the operation will continue and 
  405. X        at some point cause a real problem).
  406. X
  407. X    Fatal errors are:
  408. X
  409. X    Detectable corruption to the malloc chain.
  410. X    
  411. X
  412. X 5. The operations to perform when an error is detected are specified at
  413. X    run time by the use of environment variables.
  414. X
  415. X    MALLOC_WARN - specifies the warning error message handling
  416. X    MALLOC_FATAL - specifies the fatal error handling
  417. X
  418. X
  419. X    When one of these error conditions occur you will get an error
  420. X    message and the handler will execute based upon what setting
  421. X    is in the environment variables.  Currently understood settings
  422. X    are as follows:
  423. X
  424. X          0 - continue operations
  425. X          1 - drop core and exit
  426. X          2 - just exit
  427. X          3 - drop core, but continue executing.  Core files will
  428. X             be placed into core.[PID].[counter] i.e: core.00123.001
  429. X        128 - dump malloc chain and continue
  430. X        129 - dump malloc chain, dump core, and exit
  431. X        130 - dump malloc chain, exit
  432. X        131 - dump malloc chain, dump core, continue processing
  433. X        
  434. X
  435. X    There is an additional environment variable MALLOC_ERRFILE which
  436. X    is used to indicate the name of the file for error message output.
  437. X
  438. X    For example, to set up the session to generate a core file for
  439. X    every malloc warning, to drop core and exit on a malloc fatal, and 
  440. X    to log all messages to the file "malloc_log" do the following:
  441. X
  442. X        MALLOC_WARN=131
  443. X        MALLOC_FATAL=1
  444. X        MALLOC_ERRFILE=malloc_log
  445. X
  446. X        export MALLOC_WARN MALLOC_FATAL MALLOC_ERRFILE
  447. X
  448. X 6. The function malloc_dump() is available to dump the malloc chain whenever
  449. X    you might want.  It's only argument is a file descriptor to use to write
  450. X    the data.  Review the code if you need to know what data is printed.
  451. SHAR_EOF
  452. chmod 0640 dmake/dbug/malloc/_readme ||
  453. echo 'restore of dmake/dbug/malloc/_readme failed'
  454. Wc_c="`wc -c < 'dmake/dbug/malloc/_readme'`"
  455. test 4758 -eq "$Wc_c" ||
  456.     echo 'dmake/dbug/malloc/_readme: original size 4758, current size' "$Wc_c"
  457. rm -f _shar_wnt_.tmp
  458. fi
  459. # ============= dmake/dbug/malloc/calloc.c ==============
  460. if test -f 'dmake/dbug/malloc/calloc.c' -a X"$1" != X"-c"; then
  461.     echo 'x - skipping dmake/dbug/malloc/calloc.c (File already exists)'
  462.     rm -f _shar_wnt_.tmp
  463. else
  464. > _shar_wnt_.tmp
  465. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/calloc.c' &&
  466. /*
  467. X * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  468. X * You may copy, distribute, and use this software as long as this
  469. X * copyright statement is not removed.
  470. X */
  471. #include <stdio.h>
  472. X
  473. /*
  474. X * Function:    calloc()
  475. X *
  476. X * Purpose:    to allocate and nullify a data area
  477. X *
  478. X * Arguments:    nelem    - number of elements
  479. X *        elsize    - size of each element
  480. X *
  481. X * Returns:    NULL    - if malloc fails
  482. X *        or pointer to allocated space
  483. X *
  484. X * Narrative:    determine size of area to malloc
  485. X *        malloc area.
  486. X *        if malloc succeeds
  487. X *            fill area with nulls
  488. X *        return ptr to malloc'd region
  489. X */
  490. #ifndef lint
  491. static char rcs_header[] = "$Id: calloc.c,v 1.1 1992/01/24 03:28:58 dvadura Exp $";
  492. #endif
  493. X
  494. char *
  495. calloc(nelem,elsize)
  496. X    unsigned int       nelem;
  497. X    unsigned int       elsize;
  498. {
  499. X    char        * malloc();
  500. X    char        * memset();
  501. X    char        * ptr;
  502. X    unsigned int      size;
  503. X
  504. X    size = elsize * nelem;
  505. X
  506. X    if( (ptr = malloc(size)) != NULL)
  507. X    {
  508. X        (void) memset(ptr,'\0',(int)size);
  509. X    }
  510. X
  511. X    return(ptr);
  512. }
  513. X
  514. X
  515. /*
  516. X * $Log: calloc.c,v $
  517. X * Revision 1.1  1992/01/24  03:28:58  dvadura
  518. X * dmake Version 3.8, Initial revision
  519. X *
  520. X * Revision 1.6  90/05/11  00:13:07  cpcahil
  521. X * added copyright statment
  522. X * 
  523. X * Revision 1.5  90/02/24  20:41:57  cpcahil
  524. X * lint changes.
  525. X * 
  526. X * Revision 1.4  90/02/24  17:25:47  cpcahil
  527. X * changed $header to $id so full path isn't included.
  528. X * 
  529. X * Revision 1.3  90/02/24  13:32:24  cpcahil
  530. X * added function header.  moved log to end of file.
  531. X * 
  532. X * Revision 1.2  90/02/22  23:08:26  cpcahil
  533. X * fixed rcs_header line
  534. X * 
  535. X * Revision 1.1  90/02/22  23:07:38  cpcahil
  536. X * Initial revision
  537. X * 
  538. X */
  539. SHAR_EOF
  540. chmod 0640 dmake/dbug/malloc/calloc.c ||
  541. echo 'restore of dmake/dbug/malloc/calloc.c failed'
  542. Wc_c="`wc -c < 'dmake/dbug/malloc/calloc.c'`"
  543. test 1572 -eq "$Wc_c" ||
  544.     echo 'dmake/dbug/malloc/calloc.c: original size 1572, current size' "$Wc_c"
  545. rm -f _shar_wnt_.tmp
  546. fi
  547. # ============= dmake/dbug/malloc/debug.h ==============
  548. if test -f 'dmake/dbug/malloc/debug.h' -a X"$1" != X"-c"; then
  549.     echo 'x - skipping dmake/dbug/malloc/debug.h (File already exists)'
  550.     rm -f _shar_wnt_.tmp
  551. else
  552. > _shar_wnt_.tmp
  553. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/debug.h' &&
  554. /*
  555. X * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  556. X * You may copy, distribute, and use this software as long as this
  557. X * copyright statement is not removed.
  558. X */
  559. /************************************************************************/
  560. /*                                    */
  561. /* this include sets up some macro functions which can be used while    */
  562. /* debugging the program, and then left in the code, but turned of by    */
  563. /* just not defining "DEBUG".  This way your production version of     */
  564. /* the program will not be filled with bunches of debugging junk    */
  565. /*                                    */
  566. /************************************************************************/
  567. /*
  568. X * $Id: debug.h,v 1.1 1992/01/24 03:28:59 dvadura Exp $
  569. X */
  570. X
  571. #ifdef DEBUG
  572. X
  573. #if DEBUG == 1            /* if default level            */
  574. #undef DEBUG
  575. #define DEBUG    100        /*   use level 100            */
  576. #endif
  577. X
  578. #include <stdio.h>
  579. X
  580. #define DEBUG0(val,str)\
  581. X                {\
  582. X                  if( DEBUG > val ) \
  583. X                    fprintf(stderr,"%s(%d): %s\n",\
  584. X                        __FILE__,__LINE__,str);\
  585. X                }
  586. #define DEBUG1(val,str,a1)\
  587. X                    {\
  588. X                  char _debugbuf[100];\
  589. X                  if( DEBUG > val )\
  590. X                   {\
  591. X                    sprintf(_debugbuf,str,a1);\
  592. X                    fprintf(stderr,"%s(%d): %s\n",\
  593. X                        __FILE__,__LINE__,_debugbuf);\
  594. X                   }\
  595. X                       }
  596. X
  597. #define DEBUG2(val,str,a1,a2)\
  598. X                    {\
  599. X                 char _debugbuf[100];\
  600. X                  if( DEBUG > val )\
  601. X                   {\
  602. X                    sprintf(_debugbuf,str,a1,a2);\
  603. X                    fprintf(stderr,"%s(%d): %s\n",\
  604. X                        __FILE__,__LINE__,_debugbuf);\
  605. X                   }\
  606. X                       }
  607. X
  608. #define DEBUG3(val,str,a1,a2,a3)\
  609. X                    {\
  610. X                  char _debugbuf[100];\
  611. X                  if( DEBUG > val )\
  612. X                   {\
  613. X                    sprintf(_debugbuf,str,a1,a2,a3);\
  614. X                    fprintf(stderr,"%s(%d): %s\n",\
  615. X                        __FILE__,__LINE__,_debugbuf);\
  616. X                   }\
  617. X                       }
  618. X
  619. #define DEBUG4(val,str,a1,a2,a3,a4)\
  620. X                     {\
  621. X                  char _debugbuf[100];\
  622. X                  if( DEBUG > val )\
  623. X                   {\
  624. X                    sprintf(_debugbuf,str,a1,a2,a3,a4);\
  625. X                    fprintf(stderr,"%s(%d): %s\n",\
  626. X                        __FILE__,__LINE__,_debugbuf);\
  627. X                   }\
  628. X                       }
  629. X
  630. #define DEBUG5(val,str,a1,a2,a3,a4,a5)\
  631. X                     {\
  632. X                  char _debugbuf[100];\
  633. X                  if( DEBUG > val )\
  634. X                   {\
  635. X                    sprintf(_debugbuf,str,a1,a2,a3,a4,a5);\
  636. X                    fprintf(stderr,"%s(%d): %s\n",\
  637. X                        __FILE__,__LINE__,_debugbuf);\
  638. X                   }\
  639. X                       }
  640. X
  641. #else
  642. X
  643. #define DEBUG0(val,s)
  644. #define DEBUG1(val,s,a1)
  645. #define DEBUG2(val,s,a1,a2)
  646. #define DEBUG3(val,s,a1,a2,a3)
  647. #define DEBUG4(val,s,a1,a2,a3,a4)
  648. #define DEBUG5(val,s,a1,a2,a3,a4,a5)
  649. X
  650. #endif /* DEBUG */
  651. X
  652. X
  653. /*
  654. X * $Log: debug.h,v $
  655. X * Revision 1.1  1992/01/24  03:28:59  dvadura
  656. X * dmake Version 3.8, Initial revision
  657. X *
  658. X * Revision 1.2  90/05/11  00:13:08  cpcahil
  659. X * added copyright statment
  660. X * 
  661. X * Revision 1.1  90/02/23  07:09:01  cpcahil
  662. X * Initial revision
  663. X * 
  664. X */
  665. SHAR_EOF
  666. chmod 0640 dmake/dbug/malloc/debug.h ||
  667. echo 'restore of dmake/dbug/malloc/debug.h failed'
  668. Wc_c="`wc -c < 'dmake/dbug/malloc/debug.h'`"
  669. test 2719 -eq "$Wc_c" ||
  670.     echo 'dmake/dbug/malloc/debug.h: original size 2719, current size' "$Wc_c"
  671. rm -f _shar_wnt_.tmp
  672. fi
  673. # ============= dmake/dbug/malloc/dump.c ==============
  674. if test -f 'dmake/dbug/malloc/dump.c' -a X"$1" != X"-c"; then
  675.     echo 'x - skipping dmake/dbug/malloc/dump.c (File already exists)'
  676.     rm -f _shar_wnt_.tmp
  677. else
  678. > _shar_wnt_.tmp
  679. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/dump.c' &&
  680. /*
  681. X * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  682. X * You may copy, distribute, and use this software as long as this
  683. X * copyright statement is not removed.
  684. X */
  685. #include <stdio.h>
  686. #include "malloc.h"
  687. #include "tostring.h"
  688. X
  689. /*
  690. X * Function:    malloc_dump()
  691. X *
  692. X * Purpose:    to dump a printed copy of the malloc chain and
  693. X *        associated data elements
  694. X *
  695. X * Arguments:    fd    - file descriptor to write data to
  696. X *
  697. X * Returns:    nothing of any use
  698. X *
  699. X * Narrative:    Just print out all the junk
  700. X *
  701. X * Notes:    This function is implemented using low level calls because
  702. X *         of the likelyhood that the malloc tree is damaged when it
  703. X *        is called.  (Lots of things in the c library use malloc and
  704. X *        we don't want to get into a catch-22).
  705. X *
  706. X */
  707. X
  708. #ifndef lint
  709. static
  710. char rcs_hdr[] = "$Id: dump.c,v 1.1 1992/01/24 03:29:01 dvadura Exp $";
  711. #endif
  712. X
  713. X
  714. #define ERRSTR    "I/O Error on malloc dump file descriptor\n"
  715. X
  716. #define WRITEOUT(fd,str,len)    if( write(fd,str,(unsigned)len) != len ) \
  717. X                { \
  718. X                    (void) write(2,ERRSTR,\
  719. X                             (unsigned)strlen(ERRSTR));\
  720. X                    exit(120); \
  721. X                }
  722. X
  723. void
  724. malloc_dump(fd)
  725. X    int        fd;
  726. {
  727. X    char              buffer[512];
  728. X    void              exit();
  729. X    int              i;
  730. X    extern char        * malloc_data_end;
  731. X    extern char        * malloc_data_start;
  732. X    extern struct mlist     * malloc_end;
  733. X    extern struct mlist      malloc_start;
  734. X    struct mlist         * ptr;
  735. X
  736. X    WRITEOUT(fd,"MALLOC CHAIN:\n",14);
  737. X    WRITEOUT(fd,"-------------------- START ----------------\n",44);
  738. X
  739. X    for(i=0; i < 80; i++)
  740. X    {
  741. X        buffer[i] = ' ';
  742. X    }
  743. X
  744. X    for(ptr = &malloc_start; ptr; ptr = ptr->next)
  745. X    {
  746. X        (void) tostring(buffer,       (int)ptr,         8,    B_HEX,    '0');
  747. X        (void) tostring(buffer+9,  (int)ptr->next,   8,    B_HEX,    '0');
  748. X        (void) tostring(buffer+18, (int)ptr->prev,   8,    B_HEX,    '0');
  749. X        (void) tostring(buffer+27, (int)ptr->flag,  10,    B_HEX,    '0');
  750. X        (void) tostring(buffer+38, (int)ptr->s.size, 8,    B_DEC,    ' ');
  751. X        (void) tostring(buffer+47, (int)ptr->s.size, 8,    B_HEX,    '0');
  752. X        (void) tostring(buffer+57, (int)ptr->data,   8,    B_HEX,    '0');
  753. X        buffer[46] = '(';
  754. X        buffer[55] = ')';
  755. X        buffer[65] = '\n';
  756. X        WRITEOUT(fd,buffer,66);
  757. X    }
  758. X    WRITEOUT(fd,"-------------------- DONE -----------------\n",44);
  759. X
  760. X    WRITEOUT(fd,"Malloc start:      ",19);
  761. X    (void) tostring(buffer, (int) &malloc_start, 8, B_HEX, '0');
  762. X    buffer[8] = '\n';
  763. X    WRITEOUT(fd,buffer,9);
  764. X
  765. X    WRITEOUT(fd,"Malloc end:        ", 19);
  766. X    (void) tostring(buffer, (int) malloc_end, 8, B_HEX, '0');
  767. X    buffer[8] = '\n';
  768. X    WRITEOUT(fd,buffer,9);
  769. X
  770. X    WRITEOUT(fd,"Malloc data start: ", 19);
  771. X    (void) tostring(buffer, (int) malloc_data_start, 8, B_HEX, '0');
  772. X    buffer[8] = '\n';
  773. X    WRITEOUT(fd,buffer,9);
  774. X
  775. X    WRITEOUT(fd,"Malloc data end:   ", 19);
  776. X    (void) tostring(buffer, (int) malloc_data_end, 8, B_HEX, '0');
  777. X    buffer[8] = '\n';
  778. X    WRITEOUT(fd,buffer,9);
  779. X    
  780. } /* malloc_dump(... */
  781. X
  782. X
  783. /*
  784. X * $Log: dump.c,v $
  785. X * Revision 1.1  1992/01/24  03:29:01  dvadura
  786. X * dmake Version 3.8, Initial revision
  787. X *
  788. X * Revision 1.5  90/08/29  21:22:37  cpcahil
  789. X * miscellaneous lint fixes
  790. X * 
  791. X * Revision 1.4  90/05/11  00:13:08  cpcahil
  792. X * added copyright statment
  793. X * 
  794. X * Revision 1.3  90/02/24  21:50:07  cpcahil
  795. X * lots of lint fixes
  796. X * 
  797. X * Revision 1.2  90/02/24  17:27:48  cpcahil
  798. X * changed $header to $Id to remove full path from rcs id string
  799. X * 
  800. X * Revision 1.1  90/02/22  23:17:43  cpcahil
  801. X * Initial revision
  802. X * 
  803. X */
  804. SHAR_EOF
  805. chmod 0640 dmake/dbug/malloc/dump.c ||
  806. echo 'restore of dmake/dbug/malloc/dump.c failed'
  807. Wc_c="`wc -c < 'dmake/dbug/malloc/dump.c'`"
  808. test 3270 -eq "$Wc_c" ||
  809.     echo 'dmake/dbug/malloc/dump.c: original size 3270, current size' "$Wc_c"
  810. rm -f _shar_wnt_.tmp
  811. fi
  812. # ============= dmake/dbug/malloc/free.c ==============
  813. if test -f 'dmake/dbug/malloc/free.c' -a X"$1" != X"-c"; then
  814.     echo 'x - skipping dmake/dbug/malloc/free.c (File already exists)'
  815.     rm -f _shar_wnt_.tmp
  816. else
  817. > _shar_wnt_.tmp
  818. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/free.c' &&
  819. /*
  820. X * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  821. X * You may copy, distribute, and use this software as long as this
  822. X * copyright statement is not removed.
  823. X */
  824. #include <stdio.h>
  825. #include "malloc.h"
  826. #include "debug.h"
  827. X
  828. /*
  829. X * Function:    free()
  830. X *
  831. X * Purpose:    to deallocate malloced data
  832. X *
  833. X * Arguments:    ptr    - pointer to data area to deallocate
  834. X *
  835. X * Returns:    nothing of any value
  836. X *
  837. X * Narrative:
  838. X *        verify pointer is within malloc region
  839. X *        get mlist pointer from passed address
  840. X *        verify magic number
  841. X *        verify inuse flag
  842. X *        verify pointer connections with surrounding segments
  843. X *        turn off inuse flag
  844. X *        verify no data overrun into non-malloced area at end of segment
  845. X *        IF possible join segment with next segment
  846. X *        IF possible join segment with previous segment
  847. X *        Clear all data in segment (to make sure it isn't reused)
  848. X *
  849. X */
  850. #ifndef lint
  851. static
  852. char rcs_hdr[] = "$Id: free.c,v 1.1 1992/01/24 03:29:02 dvadura Exp $";
  853. #endif
  854. X
  855. void
  856. free(cptr)
  857. X    char    * cptr;
  858. {
  859. X    char            * func = "free";
  860. X    int              i;
  861. X    extern int          malloc_checking;
  862. X    extern struct mlist    * malloc_end;
  863. X    extern int          malloc_errno;
  864. X    extern char        * malloc_data_end;
  865. X    extern char        * malloc_data_start;
  866. X    void              malloc_join();
  867. X    void              malloc_memset();
  868. X    struct mlist        * oldptr;
  869. X    struct mlist        * ptr;
  870. X
  871. X    /*
  872. X     * IF malloc chain checking is on, go do it.
  873. X     */
  874. X    if( malloc_checking )
  875. X    {
  876. X        (void) malloc_chain_check(1);
  877. X    }
  878. X
  879. X    /*
  880. X     * verify that cptr is within the malloc region...
  881. X     */
  882. X    if( cptr < malloc_data_start || cptr > malloc_data_end )
  883. X    {
  884. X        malloc_errno = M_CODE_BAD_PTR;
  885. X        malloc_warning(func);
  886. X        return;
  887. X    }
  888. X
  889. X    /* 
  890. X     * convert pointer to mlist struct pointer.  To do this we must 
  891. X     * move the pointer backwards the correct number of bytes...
  892. X     */
  893. X    
  894. X    ptr = (struct mlist *) (cptr - M_SIZE);
  895. X    
  896. X    if( (ptr->flag&M_MAGIC) != M_MAGIC )
  897. X    {
  898. X        malloc_errno = M_CODE_BAD_MAGIC;
  899. X        malloc_warning(func);
  900. X        return;
  901. X    }
  902. X
  903. X    if( ! (ptr->flag & M_INUSE) )
  904. X    {
  905. X        malloc_errno = M_CODE_NOT_INUSE;
  906. X        malloc_warning(func);
  907. X        return;
  908. X    }
  909. X
  910. X     if( (ptr->prev && (ptr->prev->next != ptr) ) ||
  911. X        (ptr->next && (ptr->next->prev != ptr) ) ||
  912. X        ((ptr->next == NULL) && (ptr->prev == NULL)) )
  913. X    {
  914. X        malloc_errno = M_CODE_BAD_CONNECT;
  915. X        malloc_warning(func);
  916. X        return;
  917. X    }
  918. X
  919. X    ptr->flag &= ~M_INUSE;
  920. X
  921. X    /*
  922. X     * verify that the user did not overrun the requested number of bytes.
  923. X     */
  924. X    for(i=ptr->r_size; i < ptr->s.size; i++)
  925. X    {
  926. X        if( ptr->data[i] != M_FILL )
  927. X        {
  928. X            malloc_errno = M_CODE_OVERRUN;
  929. X            malloc_warning(func);
  930. X            break;
  931. X        }
  932. X    }
  933. X
  934. X    DEBUG3(10,"pointers: prev: 0x%.7x,  ptr: 0x%.7x, next: 0x%.7x",
  935. X            ptr->prev, ptr, ptr->next);
  936. X    
  937. X    DEBUG3(10,"size:     prev: %9d,  ptr: %9d, next: %9d",
  938. X            ptr->prev->s.size, ptr->s.size, ptr->next->s.size);
  939. X    
  940. X    DEBUG3(10,"flags:    prev: 0x%.7x,  ptr: 0x%.7x, next: 0x%.7x",
  941. X            ptr->prev->flag, ptr->flag, ptr->next->flag);
  942. X    
  943. X    /*
  944. X     * check to see if this block can be combined with the next and/or
  945. X     * previous block.  Since it may be joined with the previous block
  946. X     * we will save a pointer to the previous block and test to verify
  947. X     * if it is joined (it's next ptr will no longer point to ptr).
  948. X      */
  949. X    malloc_join(ptr,ptr->next,0,0);
  950. X    
  951. X    oldptr = ptr->prev;
  952. X
  953. X    malloc_join(ptr->prev, ptr,0,0);
  954. X
  955. X    if( oldptr->next != ptr )
  956. X    {
  957. X        DEBUG0(10,"Oldptr was changed");
  958. X        ptr = oldptr;
  959. X    }
  960. X    
  961. X    /*
  962. X     * fill this block with '\02's to ensure that nobody is using a 
  963. X     * pointer to already freed data...
  964. X     */
  965. X    malloc_memset(ptr->data,M_FREE_FILL,(int)ptr->s.size);
  966. X
  967. }
  968. X
  969. /*
  970. X * $Log: free.c,v $
  971. X * Revision 1.1  1992/01/24  03:29:02  dvadura
  972. X * dmake Version 3.8, Initial revision
  973. X *
  974. X * Revision 1.9  90/08/29  21:22:48  cpcahil
  975. X * miscellaneous lint fixes
  976. X * 
  977. X * Revision 1.8  90/05/11  00:13:08  cpcahil
  978. X * added copyright statment
  979. X * 
  980. X * Revision 1.7  90/02/25  11:00:18  cpcahil
  981. X * added support for malloc chain checking.
  982. X * 
  983. X * Revision 1.6  90/02/24  21:50:18  cpcahil
  984. X * lots of lint fixes
  985. X * 
  986. X * Revision 1.5  90/02/24  17:29:13  cpcahil
  987. X * changed $Header to $Id so full path wouldnt be included as part of rcs 
  988. X * id string
  989. X * 
  990. X * Revision 1.4  90/02/24  15:15:32  cpcahil
  991. X * 1. changed ALREADY_FREE errno to NOT_INUSE so that the same errno could
  992. X *    be used by both free and realloc (since it was the same error).
  993. X * 2. fixed coding bug
  994. X * 
  995. X * Revision 1.3  90/02/24  14:23:45  cpcahil
  996. X * fixed malloc_warning calls
  997. X * 
  998. X * Revision 1.2  90/02/24  13:59:10  cpcahil
  999. X * added function header.
  1000. X * Modified calls to malloc_warning/malloc_fatal to use new code error messages
  1001. X * Added support for malloc_errno setting of error codes.
  1002. X * 
  1003. X * Revision 1.1  90/02/22  23:17:43  cpcahil
  1004. X * Initial revision
  1005. X * 
  1006. X */
  1007. SHAR_EOF
  1008. chmod 0640 dmake/dbug/malloc/free.c ||
  1009. echo 'restore of dmake/dbug/malloc/free.c failed'
  1010. Wc_c="`wc -c < 'dmake/dbug/malloc/free.c'`"
  1011. test 4604 -eq "$Wc_c" ||
  1012.     echo 'dmake/dbug/malloc/free.c: original size 4604, current size' "$Wc_c"
  1013. rm -f _shar_wnt_.tmp
  1014. fi
  1015. # ============= dmake/dbug/malloc/m_init.c ==============
  1016. if test -f 'dmake/dbug/malloc/m_init.c' -a X"$1" != X"-c"; then
  1017.     echo 'x - skipping dmake/dbug/malloc/m_init.c (File already exists)'
  1018.     rm -f _shar_wnt_.tmp
  1019. else
  1020. > _shar_wnt_.tmp
  1021. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/m_init.c' &&
  1022. /*
  1023. X * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  1024. X * You may copy, distribute, and use this software as long as this
  1025. X * copyright statement is not removed.
  1026. X */
  1027. #include <stdio.h>
  1028. #include "malloc.h"
  1029. X
  1030. /*
  1031. X * Function:    malloc_init()
  1032. X *
  1033. X * Purpose:    to initialize the pointers and variables use by the
  1034. X *        malloc() debugging library
  1035. X *
  1036. X * Arguments:    none
  1037. X *
  1038. X * Returns:    nothing of any value
  1039. X *
  1040. X * Narrative:    Just initialize all the needed variables.  Use mallopt
  1041. X *        to set options taken from the environment.
  1042. X *
  1043. X */
  1044. #ifndef lint
  1045. static
  1046. char rcs_hdr[] = "$Id: m_init.c,v 1.1 1992/01/24 03:29:03 dvadura Exp $";
  1047. #endif
  1048. X
  1049. void
  1050. malloc_init()
  1051. {
  1052. X    char            * cptr;
  1053. X    char            * getenv();
  1054. X    union malloptarg      m;
  1055. X    extern char        * malloc_data_end;
  1056. X    extern char        * malloc_data_start;
  1057. X    extern struct mlist    * malloc_end;
  1058. X    extern struct mlist      malloc_start;
  1059. X    char            * sbrk();
  1060. X
  1061. X    /*
  1062. X      * If already initialized...
  1063. X     */
  1064. X    if( malloc_data_start != (char *) 0)
  1065. X    {
  1066. X        return;
  1067. X    }
  1068. X
  1069. X
  1070. X    malloc_data_start = sbrk(0);
  1071. X    malloc_data_end = malloc_data_start;
  1072. X    malloc_start.s.size = 0;
  1073. X    malloc_end = &malloc_start;
  1074. X    
  1075. X    if( (cptr=getenv("MALLOC_WARN")) != NULL )
  1076. X    {
  1077. X        m.i = atoi(cptr);
  1078. X        (void) mallopt(MALLOC_WARN,m);
  1079. X    }
  1080. X
  1081. X    if( (cptr=getenv("MALLOC_FATAL")) != NULL)
  1082. X    {
  1083. X        m.i = atoi(cptr);
  1084. X        (void) mallopt(MALLOC_FATAL,m);
  1085. X    }
  1086. X
  1087. X    if( (cptr=getenv("MALLOC_CKCHAIN")) != NULL)
  1088. X    {
  1089. X        m.i = atoi(cptr);
  1090. X        (void) mallopt(MALLOC_CKCHAIN,m);
  1091. X    }
  1092. X
  1093. X    if( (cptr=getenv("MALLOC_ERRFILE")) != NULL)
  1094. X    {
  1095. X        m.str = cptr;
  1096. X        (void) mallopt(MALLOC_ERRFILE,m);
  1097. X    }
  1098. X
  1099. }
  1100. X
  1101. /*
  1102. X * $Log: m_init.c,v $
  1103. X * Revision 1.1  1992/01/24  03:29:03  dvadura
  1104. X * dmake Version 3.8, Initial revision
  1105. X *
  1106. X * Revision 1.6  90/08/29  22:23:21  cpcahil
  1107. X * fixed mallopt to use a union as an argument.
  1108. X * 
  1109. X * Revision 1.5  90/08/29  21:22:50  cpcahil
  1110. X * miscellaneous lint fixes
  1111. X * 
  1112. X * Revision 1.4  90/05/11  15:53:35  cpcahil
  1113. X * fixed bug in initialization code.
  1114. X * 
  1115. X * Revision 1.3  90/05/11  00:13:08  cpcahil
  1116. X * added copyright statment
  1117. X * 
  1118. X * Revision 1.2  90/02/24  21:50:20  cpcahil
  1119. X * lots of lint fixes
  1120. X * 
  1121. X * Revision 1.1  90/02/24  17:10:53  cpcahil
  1122. X * Initial revision
  1123. X * 
  1124. X */
  1125. SHAR_EOF
  1126. chmod 0640 dmake/dbug/malloc/m_init.c ||
  1127. echo 'restore of dmake/dbug/malloc/m_init.c failed'
  1128. Wc_c="`wc -c < 'dmake/dbug/malloc/m_init.c'`"
  1129. test 2113 -eq "$Wc_c" ||
  1130.     echo 'dmake/dbug/malloc/m_init.c: original size 2113, current size' "$Wc_c"
  1131. rm -f _shar_wnt_.tmp
  1132. fi
  1133. # ============= dmake/dbug/malloc/m_perror.c ==============
  1134. if test -f 'dmake/dbug/malloc/m_perror.c' -a X"$1" != X"-c"; then
  1135.     echo 'x - skipping dmake/dbug/malloc/m_perror.c (File already exists)'
  1136.     rm -f _shar_wnt_.tmp
  1137. else
  1138. > _shar_wnt_.tmp
  1139. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/m_perror.c' &&
  1140. /*
  1141. X * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  1142. X * You may copy, distribute, and use this software as long as this
  1143. X * copyright statement is not removed.
  1144. X */
  1145. X
  1146. #ifndef lint
  1147. static
  1148. char rcsid[] = "$Id: m_perror.c,v 1.1 1992/01/24 03:29:04 dvadura Exp $";
  1149. #endif
  1150. X
  1151. /*
  1152. X * malloc errno error strings...
  1153. X */
  1154. X
  1155. char *malloc_err_strings[] = 
  1156. {
  1157. X    "No errors",
  1158. X    "Malloc chain is corrupted, pointers out of order",
  1159. X    "Malloc chain is corrupted, end before end pointer",
  1160. X    "Pointer is not within malloc area",
  1161. X    "Malloc region does not have valid magic number in header",
  1162. X    "Pointers between this segment and ajoining segments are invalid",
  1163. X    "Data has overrun beyond requested number of bytes",
  1164. X    "Data in free'd area has been modified",
  1165. X    "Data are is not in use (can't be freed or realloced)",
  1166. X    "Unable to get additional memory from the system",
  1167. X    "Pointer within malloc region, but outside of malloc data bounds",
  1168. X    (char *) 0
  1169. };
  1170. X
  1171. /*
  1172. X * Function:    malloc_perror()
  1173. X *
  1174. X * Purpose:    to print malloc_errno error message
  1175. X *
  1176. X * Arguments:    str    - string to print with error message
  1177. X *
  1178. X * Returns:    nothing of any value
  1179. X *
  1180. X * Narrative:
  1181. X */
  1182. void
  1183. malloc_perror(str)
  1184. X    char    * str;
  1185. {
  1186. X    extern int      malloc_errno;
  1187. X    register char     * s;
  1188. X    register char     * t;
  1189. X
  1190. X    if( str && *str)
  1191. X    {
  1192. X        for(s=str; *s; s++)
  1193. X        {
  1194. X            /* do nothing */;
  1195. X        }
  1196. X
  1197. X        (void) write(2,str,(unsigned)(s-str));
  1198. X        (void) write(2,": ",(unsigned)2);
  1199. X    }
  1200. X
  1201. X    t = malloc_err_strings[malloc_errno];
  1202. X
  1203. X    for(s=t; *s; s++)
  1204. X    {
  1205. X        /* do nothing */;
  1206. X    }
  1207. X
  1208. X    (void) write(2,t,(unsigned)(s-t));
  1209. X
  1210. X    (void) write(2,"\n",(unsigned)1);
  1211. }
  1212. X
  1213. /*
  1214. X * $Log: m_perror.c,v $
  1215. X * Revision 1.1  1992/01/24  03:29:04  dvadura
  1216. X * dmake Version 3.8, Initial revision
  1217. X *
  1218. X * Revision 1.5  90/08/29  21:25:08  cpcahil
  1219. X * added additional error message that was missing (and 
  1220. X * caused a core dump)
  1221. X * 
  1222. X * Revision 1.4  90/05/11  00:13:08  cpcahil
  1223. X * added copyright statment
  1224. X * 
  1225. X * Revision 1.3  90/02/24  21:50:21  cpcahil
  1226. X * lots of lint fixes
  1227. X * 
  1228. X * Revision 1.2  90/02/24  17:39:55  cpcahil
  1229. X * 1. added function header
  1230. X * 2. added rcs id and log strings.
  1231. X * 
  1232. X */
  1233. SHAR_EOF
  1234. chmod 0640 dmake/dbug/malloc/m_perror.c ||
  1235. echo 'restore of dmake/dbug/malloc/m_perror.c failed'
  1236. Wc_c="`wc -c < 'dmake/dbug/malloc/m_perror.c'`"
  1237. test 2064 -eq "$Wc_c" ||
  1238.     echo 'dmake/dbug/malloc/m_perror.c: original size 2064, current size' "$Wc_c"
  1239. rm -f _shar_wnt_.tmp
  1240. fi
  1241. # ============= dmake/dbug/malloc/malloc.3 ==============
  1242. if test -f 'dmake/dbug/malloc/malloc.3' -a X"$1" != X"-c"; then
  1243.     echo 'x - skipping dmake/dbug/malloc/malloc.3 (File already exists)'
  1244.     rm -f _shar_wnt_.tmp
  1245. else
  1246. > _shar_wnt_.tmp
  1247. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/malloc/malloc.3' &&
  1248. .TH MALLOC 3 "" "" "1.0"
  1249. .ds ]T 
  1250. .\"/*
  1251. .\" * (c) Copyright 1990 Conor P. Cahill (uunet!virtech!cpcahil).  
  1252. .\" * You may copy, distribute, and use this software as long as this
  1253. .\" * copyright statement is not removed.
  1254. .\" */
  1255. .\" $Id: malloc.3,v 1.3 90/08/29 22:24:44 cpcahil Exp $
  1256. .SH NAME
  1257. malloc \t- debugging malloc library
  1258. .SH SYNOPSIS
  1259. .ft B
  1260. .nf
  1261. #include <malloc.h>
  1262. X
  1263. char    * calloc(nelem,elsize);
  1264. void      free(ptr);
  1265. char    * malloc(size);
  1266. int      malloc_chain_check(flag);
  1267. void      malloc_dump(fd);
  1268. int      mallopt(cmd,val)
  1269. char    * realloc(ptr,size);
  1270. X
  1271. int              cmd,fd,flag;
  1272. unsigned          elsize,nelem,size;
  1273. char            * ptr;
  1274. union malloptarg      val;
  1275. X
  1276. .fi
  1277. .ft R
  1278. .SH DESCRIPTION
  1279. This malloc library is a replacement for the standard library to be used
  1280. during software development/debugging.  See the standard malloc(3) pages
  1281. for more information on the use of the following functions:
  1282. .nf
  1283. .in +.5i
  1284. calloc(), free(), malloc(), realloc()
  1285. .in -.5i
  1286. .fi
  1287. .sp
  1288. This library differs from the standard malloc library in the
  1289. following ways:
  1290. .P
  1291. 1. Each malloc segment contains a magic number so that free can 
  1292. verify that the pointer passed points to a valid malloc segment.
  1293. .P
  1294. 2. Each malloc segment is filled with a non-zero pattern so that code that
  1295. depends upon malloc segments being null will fail.
  1296. .P
  1297. 3. The size of each segment will be at least 1 byte larger than requested
  1298. and the extra bytes will be filled with a non-zero pattern.  When free is
  1299. called, it will verify that you did not go beyond the number of bytes 
  1300. you asked for.
  1301. .P
  1302. 4. When a segment is freed, it will be filled with a different non-zero pattern
  1303. to ensure that the program doesn't depend upon the use of already freed data.
  1304. .P
  1305. 5. Whenever any of the string or memory functions (str*, b*, mem*) are 
  1306. called with a pointer that is within the malloc arena,  the operation is
  1307. checked to verify that it does not overrun the malloced segment.  A failure
  1308. SHAR_EOF
  1309. true || echo 'restore of dmake/dbug/malloc/malloc.3 failed'
  1310. fi
  1311. echo 'End of part 4, continue with part 5'
  1312. echo 5 > _shar_seq_.tmp
  1313. exit 0
  1314. exit 0 # Just in case...
  1315.